package com.cwnu.sw.cys.core.common.exception;

import cn.hutool.http.ContentType;
import cn.hutool.json.JSONUtil;
import com.cwnu.sw.cys.core.common.domain.vo.resp.ApiResult;
import com.google.common.base.Charsets;
import lombok.AllArgsConstructor;
import lombok.Getter;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * 定义HTTP错误码及对应的错误信息枚举
 * @author Administrator
 */
@AllArgsConstructor
@Getter
public enum HttpErrorEnum implements ErrorEnum {
    /**
     * 无权限访问错误（登录失效）
     */
    ACCESS_DENIED(401, "登录失效，请重新登录"),

    // 枚举常量分隔符
    ;

    /**
     * HTTP状态码（如401表示未授权）
     */
    private final Integer httpCode;

    /**
     * 具体错误信息（如用户提示内容）
     */
    private final String msg;

    /**
     * 获取HTTP错误码
     * @return 错误码（如401）
     */
    @Override
    public Integer getErrorCode() {
        return httpCode;
    }

    /**
     * 获取错误信息
     * @return 错误描述（如"登录失效，请重新登录"）
     */
    @Override
    public String getErrorMsg() {
        return msg;
    }

    /**
     * 将错误信息写入HTTP响应
     * @param response HTTP响应对象
     * @throws IOException IO异常（如响应流写入失败）
     */
    public void sendHttpError(HttpServletResponse response) throws IOException {
        response.setStatus(this.getErrorCode());
        ApiResult<Object> responseData = ApiResult.fail(this);
        response.setContentType(ContentType.JSON.toString(Charsets.UTF_8));
        response.getWriter().write(JSONUtil.toJsonStr(responseData));
    }
}
